package cn.aws360.boot.system.biz.service;

import cn.aws360.boot.data.api.pojo.request.PageQuery;
import cn.aws360.boot.data.api.pojo.response.PageResult;
import cn.aws360.boot.system.api.pojo.request.SysDeptQuery;
import cn.aws360.boot.system.api.pojo.request.SysDeptWrite;
import cn.aws360.boot.system.api.pojo.response.SysDeptModel;
import cn.aws360.boot.system.biz.domain.SysDept;
import cn.hutool.core.lang.tree.Tree;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
 * @author junnan
 */
public interface SysDeptService extends IService<SysDept> {

    /**
     * 新增部门
     *
     * @param sysDeptWrite 新增部门参数
     * @return 是否成功
     */
    Boolean add(SysDeptWrite sysDeptWrite);

    /**
     * 修改部门
     *
     * @param sysDeptWrite 修改部门参数
     * @return 是否成功
     */
    Boolean edit(SysDeptWrite sysDeptWrite);

    /**
     * 删除部门
     *
     * @param ids 删除部门 ids
     * @return 是否成功
     */
    Boolean remove(String ids);

    /**
     * 查询部门详情
     *
     * @param id 查询部门 id
     * @return SysDeptModel
     */
    SysDeptModel detail(Integer id);

    /**
     * 查询部门列表
     *
     * @param sysDeptQuery 查询部门参数
     * @return List<SysDeptModel>
     */
    List<SysDeptModel> findList(SysDeptQuery sysDeptQuery);

    /**
     * 查询部门分页
     *
     * @param sysDeptQuery 查询部门参数
     * @param pageQuery    查询分页参数
     * @return PageResult<SysDeptModel>
     */
    PageResult<SysDeptModel> findPage(SysDeptQuery sysDeptQuery, PageQuery pageQuery);

    /**
     * 查询部门树形
     *
     * @param sysDeptQuery 查询部门参数
     * @return List<Tree < Integer>>
     */
    List<Tree<Integer>> findTree(SysDeptQuery sysDeptQuery);

    /**
     * 获取当前部门及所有下级ID列表
     *
     * @param deptId 部门ID
     * @return List<Integer>
     */
    List<Integer> findAllSubIdList(Integer deptId);

}
